//package org.ricks.item;
//
//import java.util.*;
//import java.util.stream.*;
//
//public class InventorySystem {
//    public final Map<String, ItemInstance> items = new LinkedHashMap<>();
//    private final int capacity;
//
//    public InventorySystem(int capacity) {
//        this.capacity = capacity;
//    }
//
//    public boolean addItem(int typeId, int amount) {
//        ItemMeta meta = ItemFactory.getMeta(typeId);
//        if (meta == null) return false;
//
//        List<ItemInstance> stackables = items.values().stream()
//                .filter(i -> i.typeId() == typeId && i.amount() < meta.maxStack())
//                .collect(Collectors.toList());
//
//        for (ItemInstance stack : stackables) {
//            int canAdd = meta.maxStack() - stack.amount();
//            int add = Math.min(canAdd, amount);
//            items.put(stack.uuid(), stack.withAmount(stack.amount() + add));
//            amount -= add;
//            if (amount == 0) return true;
//        }
//
//        while (amount > 0 && items.size() < capacity) {
//            int add = Math.min(meta.maxStack(), amount);
//            String uuid = UUID.randomUUID().toString();
//            items.put(uuid, new ItemInstance(typeId, uuid, add));
//            amount -= add;
//        }
//
//        return amount == 0;
//    }
//
//    public void useItem(String uuid, PlayerContext context) {
//        ItemInstance item = items.get(uuid);
//        if (item == null) return;
//
//        ItemBehavior behavior = ItemFactory.create(item.typeId());
//        behavior.onUse(context);
//
//        if (behavior instanceof ItemEffect effect) {
//            effect.apply(context);
//        }
//
//        if (ItemFactory.getMeta(item.typeId()).consumable()) {
//            removeItem(uuid, 1);
//        }
//    }
//
//    private void removeItem(String uuid, int amount) {
//        items.computeIfPresent(uuid, (k, v) -> {
//            int newAmount = v.amount() - amount;
//            return newAmount > 0 ? v.withAmount(newAmount) : null;
//        });
//    }
//}
